In general, data processing systems of all types employ registers or buffers to store data. The buffers are constructed in a variety of ways depending upon the particular application for the data processing system. For example, buffers utilized for data processing systems include random access memory (RAM) and first-in-first-out (FIFO) buffers. In addition to containing buffers for storing data, data processing systems typically employ apparatus for allocating entries in the buffer to store data. Because buffer resources are finite, data processing systems deallocate buffer entries when data stored in a corresponding buffer entry is no longer needed. Although FIFO memory devices provide easy entry allocation, FIFO memory devices are not suitable for all data processing applications.
Buffers are utilized in data processing systems to store input data, intermediate result data and output data. For example, in a digital processing system for audio or video compression, random access memory (RAM) may be employed to store input uncompressed data, intermediate data and final compressed output data. In such a digital processing system, it is necessary to reallocate buffer entries no longer needed in order to provide a continual flow of resources required for subsequent data processing. In addition, it is necessary to reallocate entries in the buffer so as to preserve data entries still required by the data processing system. Consequently, allocation of buffer entries requires both preservation of certain existing data entries, and resource assignment to new buffer entries for incoming data.
Microprocessors utilize buffers to implement file registers for use in conjunction with executing instructions. Typically, file registers store data for access by an execution unit, such as an arithmetic logic unit (ALU), in the microprocessor. The complexity of the register file and allocation required for operation of the microprocessor is dependent upon the architecture of the microprocessor. For example, in a microprocessor performing parallel execution, some instructions are executed out of the original program order. Consequently, allocation and deallocation of entries in the register file becomes complex.